home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / impacket / dcerpc / srvsvc.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2006-06-30  |  10KB  |  317 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. import array
  5. from struct import *
  6. import exceptions
  7. from impacket import ImpactPacket
  8. import dcerpc
  9. import ndrutils
  10. MSRPC_UUID_SRVSVC = '\xc8O2Kp\x16\xd3\x01\x12xZG\xbfn\xe1\x88\x03\x00\x00\x00'
  11.  
  12. class SRVSVCNetShareGetInfoHeader(ImpactPacket.Header):
  13.     OP_NUM = 16
  14.     __SIZE = 32
  15.     
  16.     def __init__(self, aBuffer = None):
  17.         ImpactPacket.Header.__init__(self, SRVSVCNetShareGetInfoHeader._SRVSVCNetShareGetInfoHeader__SIZE)
  18.         self._set_shalen(0)
  19.         self._set_serlen(0)
  20.         self.set_server_referent_id(1163124)
  21.         self.set_server_max_count(0)
  22.         self.set_server_offset(0)
  23.         self.set_server_actual_count(0)
  24.         self.set_server('')
  25.         self.set_share_max_count(0)
  26.         self.set_share_offset(0)
  27.         self.set_share_actual_count(0)
  28.         self.set_share('')
  29.         self.set_info_level(0)
  30.         if aBuffer:
  31.             self.load_header(aBuffer)
  32.         
  33.  
  34.     
  35.     def get_server_referent_id(self):
  36.         return self.get_long(0, '<')
  37.  
  38.     
  39.     def set_server_referent_id(self, id):
  40.         self.set_long(0, id, '<')
  41.  
  42.     
  43.     def get_server_max_count(self):
  44.         return self.get_long(4, '<')
  45.  
  46.     
  47.     def set_server_max_count(self, count):
  48.         self.set_long(4, count, '<')
  49.  
  50.     
  51.     def get_server_offset(self):
  52.         return self.get_long(8, '<')
  53.  
  54.     
  55.     def set_server_offset(self, offset):
  56.         self.set_long(8, offset, '<')
  57.  
  58.     
  59.     def get_server_actual_count(self):
  60.         return self.get_long(12, '<')
  61.  
  62.     
  63.     def set_server_actual_count(self, count):
  64.         self.set_long(12, count, '<')
  65.  
  66.     
  67.     def set_server(self, name):
  68.         pad = ''
  69.         if len(name) % 4:
  70.             pad = '\x00' * (4 - len(name) % 4)
  71.         
  72.         name = name + pad
  73.         self.get_bytes()[16:16 + len(name)] = array.array('B', name)
  74.         self._set_serlen(len(name))
  75.  
  76.     
  77.     def _set_serlen(self, len):
  78.         self._serlen = len
  79.  
  80.     
  81.     def _get_serlen(self):
  82.         return self._serlen
  83.  
  84.     
  85.     def _set_shalen(self, len):
  86.         self._shalen = len
  87.  
  88.     
  89.     def _get_shalen(self):
  90.         return self._shalen
  91.  
  92.     
  93.     def get_share_max_count(self):
  94.         server_max_count = self._get_serlen()
  95.         return self.get_long(16 + server_max_count, '<')
  96.  
  97.     
  98.     def set_share_max_count(self, count):
  99.         server_max_count = self._get_serlen()
  100.         self.set_long(16 + server_max_count, count, '<')
  101.  
  102.     
  103.     def get_share_offset(self):
  104.         server_max_count = self._get_serlen()
  105.         return self.get_long(20 + server_max_count, '<')
  106.  
  107.     
  108.     def set_share_offset(self, offset):
  109.         server_max_count = self._get_serlen()
  110.         self.set_long(20 + server_max_count, offset, '<')
  111.  
  112.     
  113.     def get_share_actual_count(self):
  114.         server_max_count = self._get_serlen()
  115.         return self.get_long(24 + server_max_count, '<')
  116.  
  117.     
  118.     def set_share_actual_count(self, count):
  119.         server_max_count = self._get_serlen()
  120.         self.set_long(24 + server_max_count, count, '<')
  121.  
  122.     
  123.     def set_share(self, share):
  124.         server_max_count = self._get_serlen()
  125.         pad = ''
  126.         if len(share) % 4:
  127.             pad = '\x00' * (4 - len(share) % 4)
  128.         
  129.         share = share + pad
  130.         self.get_bytes()[28 + server_max_count:28 + len(share)] = array.array('B', share)
  131.         self._set_shalen(len(share))
  132.  
  133.     
  134.     def get_info_level(self):
  135.         server_max_count = self._get_serlen()
  136.         share_max_count = self._get_shalen()
  137.         return self.get_long(28 + server_max_count + share_max_count, '<')
  138.  
  139.     
  140.     def set_info_level(self, level):
  141.         server_max_count = self._get_serlen()
  142.         share_max_count = self._get_shalen()
  143.         self.set_long(28 + server_max_count + share_max_count, level, '<')
  144.  
  145.     
  146.     def get_header_size(self):
  147.         server_max_count = self._get_serlen()
  148.         share_max_count = self._get_shalen()
  149.         return SRVSVCNetShareGetInfoHeader._SRVSVCNetShareGetInfoHeader__SIZE + server_max_count + share_max_count
  150.  
  151.  
  152.  
  153. class SRVSVCRespNetShareGetInfoHeader(ImpactPacket.Header):
  154.     __SIZE = 8
  155.     
  156.     def __init__(self, aBuffer = None):
  157.         ImpactPacket.Header.__init__(self, SRVSVCRespNetShareGetInfoHeader._SRVSVCRespNetShareGetInfoHeader__SIZE)
  158.         if aBuffer:
  159.             self.load_header(aBuffer)
  160.         
  161.  
  162.     
  163.     def get_info_level(self):
  164.         return self.get_long(0, '<')
  165.  
  166.     
  167.     def set_info_level(self, level):
  168.         self.set_long(0, level, '<')
  169.  
  170.     
  171.     def set_share_info(self, info):
  172.         raise exceptions.Exception, 'method not implemented'
  173.  
  174.     
  175.     def get_share_info(self):
  176.         level = self.get_info_level()
  177.         if level == 2:
  178.             return ndrutils.NDRPointer(self.get_bytes()[4:-4].tostring(), ShareInfoLevel2Entry)
  179.         else:
  180.             raise exceptions.Exception, 'Share Info level not supported'
  181.  
  182.     
  183.     def get_return_code(self):
  184.         return self.get_long(len(self.get_bytes()) - 4, '<')
  185.  
  186.     
  187.     def get_header_size(self):
  188.         return len(self.get_bytes())
  189.  
  190.  
  191.  
  192. class ShareInfoLevel2Entry:
  193.     
  194.     def __init__(self, data = ''):
  195.         self.set_netname(0)
  196.         self.set_remark(0)
  197.         self.set_path(0)
  198.         self.set_passwd(0)
  199.         if data:
  200.             (p_netname, self._type, p_remark, self._permissions, self._max_uses, self._current_uses, p_path, p_passwd) = unpack('<LLLLLLLL', data[:8 * 4])
  201.             data = data[8 * 4:]
  202.             if p_netname:
  203.                 self.set_netname(ndrutils.NDRString(data))
  204.                 dlen = self.get_netname().get_max_len() * 2
  205.                 pad = 0
  206.                 if dlen % 4:
  207.                     pad = 4 - dlen % 4
  208.                 
  209.                 data = data[12 + dlen + pad:]
  210.             
  211.             if p_remark:
  212.                 self.set_remark(ndrutils.NDRString(data))
  213.                 dlen = self.get_remark().get_max_len() * 2
  214.                 pad = 0
  215.                 if dlen % 4:
  216.                     pad = 4 - dlen % 4
  217.                 
  218.                 data = data[12 + dlen + pad:]
  219.             
  220.             if p_path:
  221.                 self.set_path(ndrutils.NDRString(data))
  222.                 dlen = self.get_path().get_max_len() * 2
  223.                 pad = 0
  224.                 if dlen % 4:
  225.                     pad = 4 - dlen % 4
  226.                 
  227.                 data = data[12 + dlen + pad:]
  228.             
  229.             if p_passwd:
  230.                 self.set_passwd(ndrutils.NDRString(data))
  231.                 dlen = self.get_passwd().get_max_len() * 2
  232.                 pad = 0
  233.                 if dlen % 4:
  234.                     pad = 4 - dlen % 4
  235.                 
  236.                 data = data[12 + dlen + pad:]
  237.             
  238.         
  239.  
  240.     
  241.     def set_netname(self, netname):
  242.         self._netname = netname
  243.  
  244.     
  245.     def get_netname(self):
  246.         return self._netname
  247.  
  248.     
  249.     def set_remark(self, remark):
  250.         self._remark = remark
  251.  
  252.     
  253.     def get_remark(self):
  254.         return self._remark
  255.  
  256.     
  257.     def set_path(self, path):
  258.         self._path = path
  259.  
  260.     
  261.     def get_path(self):
  262.         return self._path
  263.  
  264.     
  265.     def set_passwd(self, passwd):
  266.         self._passwd = passwd
  267.  
  268.     
  269.     def get_passwd(self):
  270.         return self._passwd
  271.  
  272.     
  273.     def get_type(self):
  274.         return self._type
  275.  
  276.     
  277.     def get_permissions(self):
  278.         return self._permissions
  279.  
  280.     
  281.     def get_max_uses(self):
  282.         return self._max_uses
  283.  
  284.     
  285.     def get_current_uses(self):
  286.         return self._current_uses
  287.  
  288.  
  289.  
  290. class DCERPCSrvSvc:
  291.     
  292.     def __init__(self, dcerpc):
  293.         self._dcerpc = dcerpc
  294.  
  295.     
  296.     def get_share_info(self, server, share, level):
  297.         server += '\x00'
  298.         share += '\x00'
  299.         server = server.encode('utf-16le')
  300.         share = share.encode('utf-16le')
  301.         info = SRVSVCNetShareGetInfoHeader()
  302.         server_len = len(server)
  303.         share_len = len(share)
  304.         info.set_server_max_count(server_len / 2)
  305.         info.set_server_actual_count(server_len / 2)
  306.         info.set_server(server)
  307.         info.set_share_max_count(share_len / 2)
  308.         info.set_share_actual_count(share_len / 2)
  309.         info.set_share(share)
  310.         info.set_info_level(2)
  311.         self._dcerpc.send(info)
  312.         data = self._dcerpc.recv()
  313.         retVal = SRVSVCRespNetShareGetInfoHeader(data)
  314.         return retVal
  315.  
  316.  
  317.